encrypt-api 接口加解密使用

版本要求

环境组件版本备注
架构微服务
PigX5.7+
JDK17分支:jdk17

整体流程

flowchart LR
  A[前端业务代码调用 request] --> B

  subgraph FE[前端统一处理:request.ts]
    B[请求拦截器统一加密请求]
    C[响应拦截器统一解密响应]
  end

  subgraph BE[后端common-encrypt-api]
    D[Filter / RequestBodyAdvice<br/>统一接入]
    E[ApiCryptoUtil.decryptData<br/>统一解密]
    F[Controller / Service<br/>按明文处理业务]
    G[ApiEncryptResponseBodyAdvice<br/>统一加密响应]
    H[ApiCryptoUtil.encryptData<br/>统一加密]
  end

  B --> D --> E --> F --> G --> H --> C --> I[页面拿到解密后的结果]

快速上手

添加依赖

<dependency>
    <groupId>com.pig4cloud</groupId>
    <artifactId>pigx-common-encrypt-api</artifactId>
</dependency>

配置加解密密钥

在 nacos/application-dev.yml 配置文件中进行配置,对所有的微服务有效。

密钥要求

aes-key 必须为 16 位,当前版本暂只支持 AES 加密算法。

security:
  api:
    encrypt:
      enable: true                  # 开启请求加解密
      aes-key: 1234567812345678     # 注意必须为 16 位,当前版本暂只支持 AES

PigX 前端处理

配置加密参数

前端加密配置

找到前端根目录的 .env 文件,开启加解密配置:

VITE_PWD_ENC_KEY=加密密钥          # 16 位,注意和后端保持一致
VITE_API_ENC_ENABLED=true         # 开启加解密功能 (没有需新增)
密钥一致性

加密密钥必须为 16 位,并且和后端保持一致。

特殊场景:跳过加解密

在某些特殊场景下,如文件上传、下载或包含特殊字符的请求中,可能需要跳过加密处理。

后端跳过加解密

PigX 提供了 @NoEncrypt 注解来实现跳过加密处理功能,该注解可以应用在 Controller 方法上,用于标识该接口不需要进行加密/解密处理。

使用场景

适用于文件上传/下载、包含特殊字符的请求等场景。

@NoEncrypt
@GetMapping("/local/file/{fileName}")
public void localFile(@PathVariable String fileName, HttpServletResponse response) {
    ClassPathResource resource = new ClassPathResource("file/" + fileName);
    response.setContentType("application/octet-stream; charset=UTF-8");
    IoUtil.copy(resource.getInputStream(), response.getOutputStream());
}

前端跳过加解密

在请求头中设置 Enc-Flag: false 来跳过加解密:

request({
    url: "xxx",
    headers: {
        "Enc-Flag": "false",    // 通过指定 Enc-Flag: false 跳过加解密
    },
    method: "get",
    params: { xxx },
});